package com.qk.common.context;

import com.qk.entity.pojo.User;
import org.springframework.stereotype.Component;

/**
 * 用户上下文工具类，基于ThreadLocal实现用户信息的线程隔离存储
 */
@Component
public class UserContext {
    
    /**
     * 使用ThreadLocal存储当前线程的用户信息
     */
    private static final ThreadLocal<User> userContext = new ThreadLocal<>();
    
    /**
     * 设置当前线程的用户信息
     * 
     * @param user  用户信息对象
     */
    public static void setUser(User user) {
        userContext.set(user);
    }
    
    /**
     * 获取当前线程的用户信息
     * 
     * @return 当前 用户信息对象
     */
    public static User getUser() {
        return userContext.get();
    }
    
    /**
     * 获取当前用户的ID
     * 
     * @return 当前用户的ID
     */
    public static Integer getUserId() {
        User user = getUser();
        return user != null ? user.getId() : null;
    }
    
    /**
     * 获取当前用户名
     * 
     * @return 当前用户名
     */
    public static String getUsername() {
        User user = getUser();
        return user != null ? user.getUsername() : null;
    }
    
    /**
     * 清除当前线程的用户信息
     */
    public static void clear() {
        userContext.remove();
    }
}
